//package com.itstyle.seckill.util.statusflow;
//
//import cn.gogpay.dcb.mall.common.enums.order.OrderStatusEnum;
//import cn.gogpay.dcb.mall.order.common.enums.ReasonStatus;
//import cn.gogpay.dcb.mall.order.entity.OrderEntity;
//import cn.gogpay.dcb.mall.order.web.flow.dto.OrderStatusFlux;
//import cn.gogpay.dcb.mall.order.web.flow.form.AbstractFlowForm;
//import io.swagger.annotations.ApiParam;
//
//import java.lang.annotation.*;
//
///**
// * 响应订单状态变更事件
// * 方法签名必须为如下格式，否则程序将抛出异常
// * <p>
// * <pre><code>public ResultDTO<Void> methodName(){}</code></pre>
// * </p>
// * <p>
// * 参数说明:事件调度器会自动向事件方法注入参数，事件方法仅需在方法签名中添加所需参数，事件调度器即可自动注入所需参数，具体注入参数如下列表
// * </p>
// * <ul>
// * <li>
// *     1、<b>事件源：</b>包含所有的事件触发参数，类型注入，仅需将参数定义为 {@link OrderStatusFlux}类型
// * </li>
// * <li>
// *     2、<b>订单实体：</b>当前操作的订单实体，类型注入，仅需将参数定义为{@link OrderEntity} </code>类型
// * </li>
// * <li>
// *     3、<b>变更原因：</b>当前状态的变更原因枚举，类型注入，仅需将参数定义为 {@link ReasonStatus}类型
// * </li>
// * <li>
// *     4、<b>变更事件：</b>当前触发事件方法调用的事件类型，类型注入，仅需将参数定义为{@link OrderStatusEvent}类型
// * </li>
// * <li>
// *     5、<b>事件数据：</b>当前触发事件的数据体，类型注入，仅需将参数定义为当前事件的数据类型，且类型必须继承{@link AbstractFlowForm}类
// * </li>
// * <li>
// *     6、<b>订单编号：</b>当前订单的订单编号，名称注入，将参数名定义为orderNo或者使用{@link ApiParam}注解描述参数，并将名称声明为orderNo
// * </li>
// * <li>
// *     7、<b>操作人：</b>事件触发的操作人，名称注入，将参数名定义为operationName或者使用{@link ApiParam}注解描述参数，并将名称声明为operationName
// * </li>
// * </ul>
// *
// * @see cn.gogpay.dcb.mall.order.web.flow.OrderStatusFlowService
// */
//@Documented
//@Retention(RetentionPolicy.RUNTIME)
//@Target(ElementType.METHOD)
//public @interface OnOrderStatusEvent {
//    /**
//     * 指定方法响应的触发事件
//     *
//     * @return
//     */
//    OrderStatusEvent value();
//
//    /**
//     * 限制订单状态必须处于哪些状态才可以进入响应
//     *
//     * @return
//     */
//    OrderStatusEnum[] behindStatus();
//}
